//
// Created by 啊汤哥 on 2025/6/19.
//
#include <cstdio>
#include <stdlib.h>

#define MaxSize 10
typedef struct {
    int data[MaxSize];
    int length;
}SqList;

void InitList(SqList &L) {
    L.length = 0;
}

bool ListInsert(SqList &L,int i, int e) {
    if (i<1 || i>L.length +1) {
        return false;
    }
    // 存储空间已满不能插入
    if (L.length >= MaxSize) {
        return false;
    }
    // 将第i个元素后移
    for (int j = L.length; j>=i; j--) {
        L.data[j] = L.data[j-1];
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

// 删除表L中第i个元素并用e返回删除的元素
bool ListDelete(SqList &L,int i, int &e) {
    if (i<1 || i>L.length ) {
        return false;
    }
    // 删除的元素赋值
    e = L.data[i-1];
    for (int j = i; j<L.length; j++) {
        L.data[j-1] = L.data[j];
    }
    L.length--;
    return true;

}

// 按位查询，返回第i个元素
bool GetElement(SqList &L, int i ,int &e) {
    if (i < 1 || i > L.length) {
        return false;
    }

    e = L.data[i-1];
    return true;
}

// 按值查询 返回值为e的元素位置 不存在返回-1
int LocateElement(SqList L, int e) {
    for (int i = 0; i<L.length;i++) {
        if (L.data[i] == e) {
            return i+1;
        }
    }
    return -1;
}

// 打印表的内容
void PrintList(SqList L) {
    printf("Sequence table content：");
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);
    }
    printf("\nCurrent length：%d\n", L.length);
}

int main() {
    SqList L;
    InitList(L);  // 初始化顺序表

    // 测试插入功能
    for (int i = 1; i <= 5; i++) {
        ListInsert(L, i, i * 10);  // 插入10,20,30,40,50
    }
    PrintList(L);

    printf("====del text ==== \n");

    int deleteValue;
    if (ListDelete(L, 3, deleteValue)) {
        printf("delete value: %d\n", deleteValue);
    } else {
        printf("delete fail");
    }

    PrintList(L);

    // 按位查询
    int element;
    if (GetElement(L,2,element)) {
        printf("Element is : %d\n", element);
    }
    else printf("NO");

    // 按值查询
    int value = LocateElement(L,10);
    if (value != -1) printf("True");
    else printf("False");

}